package com.eastfair.venueservice.entity;

import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelEntity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.eastfair.core.base.entity.Entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import static com.eastfair.core.utils.DateUtils.DEFAULT_DATE_TIME_FORMAT;
import com.eastfair.annotation.model.EchoVO;
import com.eastfair.venueservice.enumeration.ServiceInventoryInFlowInStockTypeEnum;

import static com.baomidou.mybatisplus.annotation.SqlCondition.LIKE;

/**
 * <p>
 * 实体类
 * 服务库存入库流水记录
 * </p>
 *
 * @author linan
 * @since 2022-09-23
 */
@Data
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("vsm_service_inventory_in_flow")
@ApiModel(value = "ServiceInventoryInFlow", description = "服务库存入库流水记录")
@AllArgsConstructor
public class ServiceInventoryInFlow extends Entity<Long> implements EchoVO {

    private static final long serialVersionUID = 1L;
    @TableField(exist = false)
    private Map<String, Object> echoMap = new HashMap<>();
    /**
     * 是否启用（确认状态）：1是 已确认；0否 未确认
     */
    @ApiModelProperty(value = "是否启用（确认状态）：1是 已确认；0否 未确认")
    @TableField(value = "is_enabled")
    @Excel(name = "是否启用（确认状态）：1是 已确认；0否 未确认")
    private Integer isEnabled;

    /**
     * 是否删除：1是；0否
     */
    @ApiModelProperty(value = "是否删除：1是；0否")
    @TableField(value = "is_deleted")
    @Excel(name = "是否删除：1是；0否")
    private Integer isDeleted;

    /**
     * 项目id
     */
    @ApiModelProperty(value = "项目id")
    @TableField(value = "project_id")
    @Excel(name = "项目id")
    private Long projectId;

    /**
     * 子系统id
     */
    @ApiModelProperty(value = "子系统id")
    @TableField(value = "subsystem_id")
    @Excel(name = "子系统id")
    private Long subsystemId;

    /**
     * 租户id
     */
    @ApiModelProperty(value = "租户id")
    @TableField(value = "tenant_id")
    @Excel(name = "租户id")
    private Long tenantId;

    /**
     * 库存编码
     */
    @ApiModelProperty(value = "库存编码")
    @Size(max = 255, message = "库存编码长度不能超过255")
    @TableField(value = "inventory_code", condition = LIKE)
    @Excel(name = "库存编码")
    private String inventoryCode;

    /**
     * 变动前库存数量
     */
    @ApiModelProperty(value = "变动前库存数量")
    @TableField(value = "before_inventory_num")
    @Excel(name = "变动前库存数量")
    private BigDecimal beforeInventoryNum;

    /**
     * 变动后库存数量
     */
    @ApiModelProperty(value = "变动后库存数量")
    @TableField(value = "after_inventory_num")
    @Excel(name = "变动后库存数量")
    private BigDecimal afterInventoryNum;

    /**
     * 入库数量
     */
    @ApiModelProperty(value = "入库数量")
    @TableField(value = "in_num")
    @Excel(name = "入库数量")
    private BigDecimal inNum;

    /**
     * 入库类型 #{ SERVICE_FINISH:服务结束入库;SERVICE_REFUND:服务退款入库;CHECK:盘点入库;OTHER:其他入库;INIT:初始入库;ORDER_CANCEL:订单取消入库;REPAIR:维修入库;RETURN:归还入库}
     */
    @ApiModelProperty(value = "入库类型 #{ SERVICE_FINISH:服务结束入库;SERVICE_REFUND:服务退款入库;CHECK:盘点入库;OTHER:其他入库;INIT:初始入库;ORDER_CANCEL:订单取消入库;REPAIR:维修入库;RETURN:归还入库}")
    @TableField(value = "in_stock_type")
    @Excel(name = "入库类型 #{ SERVICE_FINISH:服务结束入库;SERVICE_REFUND:服务退款入库;CHECK:盘点入库;OTHER:其他入库;INIT:初始入库;ORDER_CANCEL:订单取消入库;REPAIR:维修入库;RETURN:归还入库}", replace = {"服务结束入库_SERVICE_FINISH", "服务退款入库_SERVICE_REFUND", "盘点入库_CHECK", "其他入库_OTHER", "初始入库_INIT", "订单取消入库_ORDER_CANCEL", "维修入库_REPAIR", "归还入库_RETURN",  "_null"})
    private ServiceInventoryInFlowInStockTypeEnum inStockType;

    /**
     * 展会id
     */
    @ApiModelProperty(value = "展会id")
    @TableField(value = "exhibition_manage_id")
    @Excel(name = "展会id")
    private Long exhibitionManageId;

    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    @Size(max = 255, message = "备注长度不能超过255")
    @TableField(value = "remark", condition = LIKE)
    @Excel(name = "备注")
    private String remark;


    @Builder
    public ServiceInventoryInFlow(Long id, Long createdBy, LocalDateTime createTime, Long updatedBy, LocalDateTime updateTime, 
                    Integer isEnabled, Integer isDeleted, Long projectId, Long subsystemId, Long tenantId, 
                    String inventoryCode, BigDecimal beforeInventoryNum, BigDecimal afterInventoryNum, BigDecimal inNum, ServiceInventoryInFlowInStockTypeEnum inStockType, Long exhibitionManageId, String remark) {
        this.id = id;
        this.createdBy = createdBy;
        this.createTime = createTime;
        this.updatedBy = updatedBy;
        this.updateTime = updateTime;
        this.isEnabled = isEnabled;
        this.isDeleted = isDeleted;
        this.projectId = projectId;
        this.subsystemId = subsystemId;
        this.tenantId = tenantId;
        this.inventoryCode = inventoryCode;
        this.beforeInventoryNum = beforeInventoryNum;
        this.afterInventoryNum = afterInventoryNum;
        this.inNum = inNum;
        this.inStockType = inStockType;
        this.exhibitionManageId = exhibitionManageId;
        this.remark = remark;
    }

}
